package main

import (
	"flag"
	"fmt"
	"log"

	"data_service/db"
	"data_service/handlers"
	"data_service/models"
	"data_service/router"
	"data_service/server/websocket"
)

// go run main.go -migrate 执行数据迁移
func main() {
	// 定义命令行参数
	migrate := flag.Bool("migrate", false, "是否执行数据库迁移")
	flag.Parse()

	// 初始化数据库
	dbInstance := db.InitDB()
	models.SetDB(dbInstance)

	// 根据命令行参数决定是否执行数据库迁移
	if *migrate {
		db.AutoMigrateDB(dbInstance)
		fmt.Println("数据库迁移完成")
		return
	}

	// 初始化WebSocket服务器
	wsServer := websocket.NewWebSocketServerInstance("0.0.0.0:9988") // WebSocket独立端口

	// 设置数据库连接
	wsServer.SetDB(dbInstance)

	// 在线状态管理器已在NewWebSocketServer中初始化

	// 设置全局WebSocket服务器实例
	handlers.SetWebSocketServer(wsServer)

	r := router.SetupRouter(wsServer)

	// 将路由设置到WebSocket服务器
	wsServer.SetHandler(r)

	// 启动WebSocket服务器
	go func() {
		if err := wsServer.Start(); err != nil {
			log.Fatalf("Failed to start WebSocket server: %v", err)
		}
	}()

	go func() {
		// HTTP服务端口
		// 启动HTTP服务器
		log.Println("Starting HTTP server on :8081")
		if err := r.Run(":8081"); err != nil {
			log.Fatalf("Failed to start HTTP server: %v", err)
		}
	}()

	// 设置信号处理器，优雅关闭服务
	fmt.Println("Running in 默认 mode")
	websocket.SetupSignalHandler(wsServer)
}
